home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / cat / shellcal.i < prev    next >
Text File  |  1997-10-26  |  3KB  |  99 lines

  1. IMPLEMENTATION MODULE ShellCall;
  2.  
  3. FROM SysUtil1   IMPORT SuperPeek;
  4. FROM SYSTEM     IMPORT CALLEXT, ADR, ADDRESS, LOAD, STORE;
  5. FROM Characters IMPORT CR, LF;
  6. IMPORT MagicDOS, mtCommand, MagicStrings, MagicAES;
  7. IMPORT CatGlobal;
  8.  
  9. IMPORT ARCStarter;
  10.  
  11. CONST _shell_p = ADDRESS($4f6);
  12.  
  13. PROCEDURE system(ptr : ADDRESS):INTEGER;
  14. VAR doSys  : ADDRESS;
  15.     res    : INTEGER;
  16.     (* Xbra ? *)
  17. BEGIN
  18.   IF CatGlobal.multiTask THEN RETURN -1 END;
  19.   SuperPeek(_shell_p, doSys);
  20.   IF ptr = NIL THEN
  21.     IF LONGCARD(doSys) # 0 THEN RETURN 0 ELSE RETURN -1 END;
  22.   ELSIF doSys # 0 THEN
  23.     CALLEXT (doSys, ptr);
  24.     STORE (0,res);
  25.     RETURN res;
  26.   ELSE RETURN -1;
  27.   END;
  28. END system;
  29.  
  30. PROCEDURE CallShell(VAR str : ARRAY OF CHAR; withRedirection: BOOLEAN);
  31.   VAR shellName: ARRAY [0..255] OF CHAR;
  32.       cmd      : ARRAY [0..255] OF CHAR;
  33.       tosRun   : ARRAY [0..255] OF CHAR;
  34.       res      : INTEGER;
  35. BEGIN
  36.   IF system(ADR(str)) = -1 THEN
  37.     IF mtCommand.EnvVar (mtCommand.EnvShell, shellName)
  38.     THEN
  39.       MagicStrings.Assign (str, cmd);
  40.       MagicStrings.Insert ('"', cmd, 0);
  41.       MagicStrings.Append ('"', cmd);
  42.       MagicStrings.Insert (" -c ", cmd, 0);
  43.       cmd[0] := CHR(LENGTH (cmd));
  44.       IF withRedirection
  45.       THEN
  46.         ARCStarter.ExecProgram (shellName, cmd, FALSE, ~withRedirection, FALSE, res);
  47.       ELSE
  48.         IF LENGTH (str) > 0
  49.         THEN
  50.           MagicStrings.Assign (str, cmd);
  51.           MagicStrings.Insert ('"', cmd, 0);
  52.           MagicStrings.Append ('"', cmd);
  53.           MagicStrings.Insert (" -c ", cmd, 0);
  54.         ELSE
  55.           cmd[0] := 0C;
  56.         END;
  57.         (* Keine IO-Redirection! *)
  58.         IF CatGlobal.multiTOS & mtCommand.EnvVar ('TOSRUN=', tosRun)
  59.         THEN
  60.           (* TOSRUN auslesen und Shell darin starten *)
  61.           MagicStrings.Insert (shellName, cmd, 0);
  62.           MagicStrings.Insert (" ", cmd, 0);
  63.           cmd[0] := CHR(LENGTH (cmd));
  64.           res := MagicAES.ShelWrite(0,1,1, tosRun, cmd); 
  65.         ELSIF CatGlobal.magIx & (CatGlobal.magIxVer >= $200)
  66.         THEN
  67.           IF LENGTH (cmd) > 0 
  68.           THEN
  69.             cmd[0] := CHR(LENGTH (cmd));
  70.           END;
  71.           (* ShelWrite auf TOS-Programm ausfhren *)
  72.           res := MagicAES.ShelWrite(1,0,100, shellName, cmd); 
  73.         ELSE
  74.           IF LENGTH (cmd) > 0 
  75.           THEN
  76.             cmd[0] := CHR(LENGTH (cmd));
  77.           END;
  78.           ARCStarter.ExecProgram (shellName, cmd, FALSE, TRUE, FALSE, res);
  79.         END;
  80.       END;
  81.     ELSE
  82.       MagicDOS.Cconout(CR); MagicDOS.Cconout(LF);
  83.       MagicDOS.Cconws('Es ist keine Shell verfgbar!');
  84.     END; 
  85.   END;
  86. END CallShell;
  87.  
  88. PROCEDURE IsShell(): shellType;
  89.   VAR shellName: ARRAY [0..255] OF CHAR;
  90. BEGIN
  91.   IF system(NIL) >= 0 THEN RETURN shellP
  92.   ELSIF mtCommand.EnvVar (mtCommand.EnvShell, shellName)
  93.   THEN RETURN shellProg
  94.   END;
  95.   RETURN noShell;
  96. END IsShell;
  97.  
  98. END ShellCall.
  99.